﻿using Dashboard.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Dashboard.Model
{
    /// <summary>
    /// 为了使得Model中的数据和View视图中呈现的数据进行双向绑定（一方面在后台业务代码修改了Model的时候要第一时间将数据呈现到View上，另一方面，用户操作修改了View上的数据要第一时间记录到Model里）
    /// 所以需要一个进行数据双向绑定的自定义基础类NotifyBase（在Common里）
    /// </summary>
    public class LoginModel : NotifyBase
    {
        /// 通过键入propfull之后再按tab键两次可以生成双向数据绑定需要的变量变动定义和内部关联的隐藏变量的定义
        private string _userName;

        public string UserName
        {
            /// 当View需要获取用户名时，将内部隐藏的用户名传出
            get { return _userName; }
            /// 当用户修改了View中的用户名时，将新的用户名缓存到对应的隐藏变量中，并发出“属性变动”通知
            set
            {
                _userName = value;
                this.DoNotify();
            }
        }

        /// <summary>
        /// 隐藏变量：密码
        /// </summary>
        private string _password;
        /// <summary>
        /// 暴露变量：密码
        /// </summary>
        public string Password
        {
            get { return _password; }
            set
            {
                //Console.WriteLine("密码变动，原："+_password+"，现："+value);
                _password = value;
                this.DoNotify();
            }
        }
        /// <summary>
        /// 隐藏变量：验证码
        /// </summary>
        private string _validationCode;
        /// <summary>
        /// 暴露变量：验证码
        /// </summary>
        public string ValidationCode
        {
            get { return _validationCode; }
            set
            {
                _validationCode = value;
                this.DoNotify();
            }
        }

        private string _errorMessage;

        public string ErrorMessage
        {
            get { return _errorMessage; }
            set
            {
                _errorMessage = value;
                this.DoNotify();
            }
        }

        private Visibility _showProgress;

        public Visibility ShowProgress
        {
            get { return _showProgress; }
            set { _showProgress = value;
                this.DoNotify();
            }
        }

    }
}
